﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Miris.HumanMilkAnalyser.Service.Interface
{
    /// <summary>
    /// A factory that manage every single service.
    /// </summary>
    public interface IServiceFactory
    {
        /// <summary>
        ///  Create an instance of class that implements IAnalysisResultDiagnosticMessageService to do any related business logic.
        /// </summary>
        /// <returns>The instance of class that implements IAnalysisResultDiagnosticMessageService.</returns>
        IAnalysisResultDiagnosticMessageService CreateAnalysisResultDiagnosticMessageService();

        /// <summary>
        ///  Create an instance of class that implements IAnalysisItemService to do any related business logic.
        /// </summary>
        /// <returns>The instance of class that implements IAnalysisItemService.</returns>
        IAnalysisItemService CreateAnalysisItemService();

        /// <summary>
        ///  Create an instance of class that implements IAnalysisResultService to do any related business logic.
        /// </summary>
        /// <returns>The instance of class that implements IAnalysisResultService.</returns>
        IAnalysisResultService CreateAnalysisResultService();

        /// <summary>
        ///  Create an instance of class that implements IDiagnosticMessageReferenceService to do any related business logic.
        /// </summary>
        /// <returns>The instance of class that implements IDiagnosticMessageReferenceService.</returns>
        IDiagnosticMessageReferenceService CreateDiagnosticMessageReferenceService();

        /// <summary>
        ///  Create an instance of class that implements IBreastfeedingSignificanceService to do any related business logic.
        /// </summary>
        /// <returns>The instance of class that implements IBreastfeedingSignificanceService.</returns>
        IBreastfeedingSignificanceService CreateBreastfeedingSignificanceService();

        /// <summary>
        ///  Create an instance of DataSourceManagementService to do any related business logic.
        /// </summary>
        /// <returns>The instance of DataSourceManagementService.</returns>
        DataSourceManagementService CreateDataSourceManagementService();

        /// <summary>
        ///  Create an instance of BasicConfigurationService to do any related business logic.
        /// </summary>
        /// <returns>The instance of BasicConfigurationService.</returns>
        BasicConfigurationService CreateBasicConfigurationService();

        /// <summary>
        ///  Create an instance of class that implements IPatientService to do any related business logic.
        /// </summary>
        /// <returns>The instance of class that implements IPatientService.</returns>
        IPatientService CreatePatientService();

        /// <summary>
        ///  Create an instance of class that implements IUnassignedSampleNumberService to do any related business logic.
        /// </summary>
        /// <returns>The instance of class that implements IUnassignedSampleNumberService.</returns>
        IUnassignedSampleNumberService CreateUnassignedSampleNumberService();

        /// <summary>
        ///  Create an instance of RegistrationCodeConfigurationService to do any related business logic.
        /// </summary>
        /// <returns>The instance of RegistrationCodeConfigurationService.</returns>
        RegistrationCodeConfigurationService CreateRegistrationCodeConfigurationService();

        /// <summary>
        ///  Create an instance of GenuineCheckService to do any related business logic.
        /// </summary>
        /// <returns>The instance of GenuineCheckService.</returns>
        GenuineCheckService CreateGenuineCheckService();
    }
}
